Conventional automation systems need collaboration among different researchers, vendors, technology developers and system integrators. The different parties may collaborate via function blocks—software code that represents basic components upon which automation applications can be built. However, such collaboration requires a level of trust that may not be present among the parties. For example, a system integrator of metal industry may desire to buy a fuzzy logic control function block for a reheating furnace. The professional who developed the fuzzy logic control function block might be concerned about his intellectual property and encrypts/obfuscates his function block. The system integrator could also be concerned about whether the function block operates as advertised, or whether or not it correctly accesses device resources, such as inputs, outputs, memory, data blocks, counters and timers, as claimed and described. Since the function block is encrypted/obfuscated, it cannot be validated or verified by using cross-reference, provided by engineering systems, such as SIMATIC Manager and TIA Portal.
There are three choices for system integrators who want to integrate third party function blocks. First, the system integrators could buy out the function blocks from technology developers, and ask them to open the source code. Secondly, the system integrators could buy and use the function blocks without asking to open the source code, trusting the technology developers. Third, the system integrator develops their own function block rather than buying existing function blocks from technology developers. The first choice is not welcomed by technology developers, who usually prefer to sell their technologies to different system integrators in different industries, and they worry about their IP and are not willing to lock-in to certain products or platforms. The second choice requires system integrators trust technology developers, which sometimes may not work, since the end users would come to system integrators if there are issues during operation, but these issues come from those black box—function blocks provided by the technology developers. In the last choice, system integrators have to develop technologies that they may not be good at, so it is not very efficient. Accordingly, it is desired to produce a verification and validation process which allows system integrators and other users to trust third party code produced by technology developers, while addressing the deficiencies of the choices presented above.